Fix flaky gap-analysis tests connecting to real Redis instead of mock - #1010
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
Summary by CodeRabbit
WalkthroughThe test module now imports the application Redis utility and patches ChangesRedis test isolation
Estimated code review effort: 1 (Trivial) | ~5 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
5197093 to
109d73e
Compare
|
@northdpole can you please review it once? |
|
Reviewed — correct fix. Patching |
Summary
Fixes #1009 — several tests in
web_main_test.pycovering/rest/v1/map_analysiswere silently connecting to a real local Redisinstance instead of the mock, causing flaky, order-dependent,
environment-dependent test failures.
Root cause
The tests patched
redis.from_url(the third-party library's URL-basedconnection factory), but
application/utils/redis.py'sconnect()function has three possible branches and takes a different, unmocked
one —
redis.StrictRedis(host=..., port=...)— wheneverREDIS_HOSTandREDIS_PORTenvironment variables are set. These are set by default foranyone following this project's own documented local setup
(
.env.examplesetsREDIS_HOST=localhost/REDIS_PORT=6379, loadedautomatically via
load_dotenv()incre.py). So the standard,documented local dev setup silently defeated the mock for anyone running
these tests.
The fix
Patch
application.utils.redis.connectdirectly, at its actual point ofuse in
web_main.py, instead of patching one specific branch(
redis.from_url) of its internal implementation. This makes the testsimmune to which branch
connect()takes based on environment variables —there's now exactly one thing to mock, and it's the thing that's actually
called.